package thread;

/**
 * 多线程
 * 多线程可以并发执行多个代码片段,相当于将代码的执行方式从原来的单一顺序执行流程
 * 改为多个代码片段"同时"执行
 *
 * 并发:多个线程(多个单一顺序的执行流程)中的代码都是走走停停的,线程调度器将CPU
 *      时间片尽可能的均匀分配给每一个线程,那个线程得到CPU时间片段就会被CPU执行一会
 *      由于CPU超高性能,宏观给我们的感受就是这些线程是同时运行的
 *
 *  线程的创建有两种方式:
 *  方式一:    定义一个类继承 Thread并重写run方法,在run方法中定义该线程要执行的代码片段
 */
public class ThreadDemo {
    public static void main(String[] args) {
        Thread myThread1 = new MyThread1();
        MyThread2 myThread2 = new MyThread2();
        myThread1.start();
        myThread2.start();
    }

    /**
     * 第一种创建线程的方式有两个弊端
     * 1:由于java是单继承的,这导致如果继承了Thread就无法再继承其他类去复用方法,实际开发中
     * 是非常不方便的
     * 2:定义线程的同时重写run方法将线程要执行的任务一同定义在了线程中,导致线程与任务
     * 存在了绑定关系,不利于线程的重用
     *
     * 优点在于结构简单,适合使用匿名内部类形式创建
     */
    static class MyThread1 extends Thread{
        public void run(){
            for (int i = 0; i <1000 ; i++) {
                System.out.println("你凑啥");
            }
        }
    }
    static class  MyThread2 extends Thread{
        public void run(){
            for (int i = 0; i <1000 ; i++) {
                System.out.println("瞅你咋地");
            }
        }
    }
}
